package objectOriented;

// 公共类演示
public class PackageDemo {
    // 公共成员，所有类都可访问
    public String publicField = "公共字段";
    
    // 受保护成员，同包内和子类可访问
    protected String protectedField = "受保护字段";
    
    // 默认访问权限，同包内可访问
    String defaultField = "默认字段";
    
    // 私有成员，仅本类可访问
    private String privateField = "私有字段";
    
    // 公共方法示例
    public void publicMethod() {
        System.out.println("这是公共方法");
    }
    
    // 受保护方法示例
    protected void protectedMethod() {
        System.out.println("这是受保护方法");
    }
    
    // 默认访问权限方法
    void defaultMethod() {
        System.out.println("这是默认访问权限方法");
    }
    
    // 私有方法示例
    private void privateMethod() {
        System.out.println("这是私有方法");
    }
    
    // 测试访问所有成员
    public void testAccess() {
        System.out.println(publicField);
        System.out.println(protectedField);
        System.out.println(defaultField);
        System.out.println(privateField);
        
        publicMethod();
        protectedMethod();
        defaultMethod();
        privateMethod();
    }

    public static void main(String[] args) {
        PackageDemo demo = new PackageDemo();
        System.out.println("=== 测试同文件类访问 ===" + demo.publicField);
    }
}

// 同一文件中的其他类（只能是默认或私有访问级别）
class SameFileClass {
    public void accessTest() {
        PackageDemo demo = new PackageDemo();
        demo.publicField = "可访问公共字段";
        demo.protectedField = "可访问受保护字段";
        demo.defaultField = "可访问默认字段";
        // demo.privateField = "无法访问私有字段"; // 编译错误
        
        demo.publicMethod();
        demo.protectedMethod();
        demo.defaultMethod();
        // demo.privateMethod(); // 编译错误
    }
} 